import { Context } from 'koa';
const { getTypes, getTypesByPage, geTypeBynameandPage, getCoursetypeByname, getInfoById, createCourseType, update, deleteType } = require('../service/course_type.service')
const { isEmpty, invalidTypeId } = require('../constants/err.type')

interface pageInfo {
    pageNum?: number,
    pageSize?: number
}

class CourseTypeController {
    // 获取课程类型列表接口
    public async getCoursetype(ctx: Context) {
        try {
            let res: any = null;
            let { pageNum, pageSize }: pageInfo = ctx.query;
            if (pageNum && pageSize) {
                pageNum = Math.max(pageNum * 1, 1);
                pageSize = Math.max(pageSize * 1, 1);
                res = await getTypesByPage(pageNum, pageSize);
            } else {
                res = await getTypes();
            }
            ctx.body = {
                code: 200,
                message: '获取课程类型列表成功',
                result: {
                    ...res
                }
            }
        } catch (error) {
            console.error('获取课程类型列表失败', error)
        }
    }
    // 根据关键词获取课程类型
    public async getCoursetypeByname(ctx: Context) {
        try {
            let res: any = null;
            let { pageNum, pageSize }: pageInfo = ctx.query;
            const keyword = ctx.query.keyword
            if(!keyword) return ctx.app.emit('error', isEmpty, ctx)
            if(pageNum && pageSize) {
                pageNum = Math.max(pageNum * 1, 1);
                pageSize = Math.max(pageSize * 1, 1);
                res = await geTypeBynameandPage(pageNum, pageSize, keyword);
            } else {
                res = await getCoursetypeByname(keyword);
            }
            ctx.body = {
                code: 200,
                message: '搜索课程类型列表成功',
                result: {
                    ...res
                }
            }
        } catch (error) {
            console.error('根据关键词获取课程类型列表失败', error)
        }
    }
    // 根据id获取课程类型
    public async getCourseById(ctx: Context) {
        try {
            const id = ctx.params.id
            const res: any = await getInfoById(id);
            if(res) {
                ctx.body = {
                    code: 200,
                    message: '根据id获取课程类型成功',
                    result: res
                }
            } else {
                return ctx.app.emit('error', invalidTypeId, ctx)
            }
        } catch (error) {
            console.error('根据id获取课程类型失败', error)
        }
    }
    // 添加课程类型
    public async addCourseType(ctx: Context) {
        try {
            const res = await createCourseType(ctx.request.body)
            if(res) {
                ctx.body = {
                    code: 200,
                    message: `添加课程类型成功`
                }
            } else {
                ctx.body = {
                    code: 500,
                    message: `添加课程类型失败`
                }
            }
        } catch (error) {
            console.error('添加课程类型失败', error)
        }
    }
    // 更新课程类型
    public async updateCourseType(ctx: Context) {
        try {
            const id = ctx.params.id
            const res = await update(id, ctx.request.body)
            if(res) {
                ctx.body = {
                    code: 200,
                    message: `更新课程类型成功`
                }
            } else {
                ctx.body = {
                    code: 500,
                    message: `更新课程类型失败`
                }
            }
        } catch (error) {
            console.error('更新课程类型失败', error)
        }
    }
    // 删除课程类型
    public async deleteCourseType(ctx: Context) {
        try {
            const id = ctx.params.id
            const res = await deleteType(id)
            if(res) {
                ctx.body = {
                    code: 200,
                    message: `删除课程类型成功`
                }
            } else {
                ctx.body = {
                    code: 500,
                    message: `删除课程类型失败`
                }
            }
        } catch (error) {
            console.error('更新课程类型失败', error)
        }
    }
}

module.exports = new CourseTypeController();